home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Shareware Grab Bag
/
Shareware Grab Bag.iso
/
090
/
cmln0885.arc
/
CROSS1.LTG
< prev
next >
Wrap
Text File
|
1986-02-27
|
3KB
|
86 lines
crossthoughts Listinτ 1«
PP╠ routine≤ t∩ recal∞ anΣ storσ element≤ oµ ß one-dimensiona∞ ì
virtua∞ array
-- Constant≤ are:
-- Table_Sizσ Maximuφ numbe≥ oµ page≤ iε RAM.
-- Page_Sizσ Numbe≥ oµ arra∙ elemen⌠s iε ß page.
-- Array_base_Addres≤ Lowe≥ arra∙ limi⌠ iε ß page.
-- VM_base_addres≤ Startinτ V═ address
-- Externa∞ identifier≤ are:
-- Table_Typσ ╜ RECOR─ RAM_Page¼ Dirty_bi⌠ ║ integer╗ EN─
-- Tablσ ║ ARRAY[1..Table_Size▌ oµ Table_Type
-- SOUGHT_PAG┼ ║ integer
-- RAM_Datß ║ ARRAY[1..PageSize▌ oµ An∙ type
-- File VM_File is assumed already opened
FUNCTION LOC(VM_Index : integer) return integer
BEGIN
SOUGHT_PAGE = VM_Index div Page_Size
-- Loop to search for page among RAM resident pages.
INITIALIZE: Found = FALSE
LOOP <Table_Lookup>
BEGIN For i = 1 TO Table_Size
IF SOUGHT_PAGE = Table[i].RAM_Page
THEN Found = True
EXIT <Table_Lookup>
END IF
END LOOP <Table_Lookup>
TERMINATE: None
IF NOT Found
THEN
Page_Swapped = Selected_Page() -- Function to select RAM resident
Page for swapping
IF Table[Page_Swapped].Dirty_bit THEN SAVE(Page_Swapped) END IF
LOAD(SOUGHT_PAGE,Page_Swapped)
Table[Page_Swapped].RAM_Page = SOUGHT_PAGE
Table[Page_Swapped].Dirty_bit = 0
SOUGHT_PAGE = Page_Swapped
ELSE
Page_Swapped = Selected_Page() -- Dummy call used to update
-- page replacement history
SOUGHT_PAGE = i
END IF
return (SOUGHT_PAGE * Page_Size + VM_Index mod Page_Size
+ Array_base_address)
END LOC
è
PROCEDURE VM_Assign(VM_Index : integer; X : Your_data)
BEGIN
RAM_Data[LOC(VM_Index)] = X
Table[SOUGHT_PAGE].Dirty_bit = 1
END VM_Assign
PROCEDURE SAVE(Page_Number : integer)
BEGIN
INITIALIZE: m = Page_Number - 1) * Page_Size + Array_base_address
p = (Table[Page_Number].RAM_Page - 1) * PageSize +
VM_base_address
LOOP
BEGIN For n = 1 to Page_Size
WRITE VM_File, (p + n),RAM_Data[m + n]
END LOOP
END SAVE
PROCEDURE LOAD(VM_Page, RAM_Page_Num : integer)
BEGIN
INITIALIZE: m = RAM_Page_Num - 1) * Page_Size + Array_base_address
p = (VM_Page - 1) * PageSize + VM_base_address
LOOP
BEGIN For n = 1 to Page_Size
READ VM_File, (p + n),RAM_Data[m + n]
END LOOP
END SAVE